import os
import pandas as pd
import logging
class ReadExcel:
    def __init__(self,catalog_file):
        # 获取项目根目录（aiDipServer）
        base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        # 拼接 Excel 文件路径
        self.catalog_file = os.path.join(base_dir, "file", catalog_file)

    def load_catalog_data(self):
        try:
            if not os.path.exists(self.catalog_file):
                raise FileNotFoundError(f"Excel文件不存在: {self.catalog_file}")
            
            # 定义需要作为字符串读取的列（手术编码相关列）
            # 这些列可能包含前导零或特殊格式，需要保持原样
            str_columns = [
                '主手术', '主手术编码', '次手术', '次手术编码', '其它手术', 
                '治疗操作', '治疗操作编码', '诊断操作', '诊断操作编码',
                '手术及操作编码', 'DIP编码', '诊断编码','总费用','中医费用'
            ]
            
            # 先读取文件获取列名
            temp_df = pd.read_excel(self.catalog_file, nrows=0)
            existing_columns = temp_df.columns.tolist()
            
            # 只对存在的列设置dtype
            dtype_dict = {}
            for col in str_columns:
                if col in existing_columns:
                    dtype_dict[col] = str
            
            # 使用指定的数据类型读取Excel
            df = pd.read_excel(self.catalog_file, dtype=dtype_dict)
            
            # 对字符串列进行后处理，将'nan'字符串转回None
            for col in dtype_dict.keys():
                if col in df.columns:
                    df[col] = df[col].replace('nan', None)
                    # 去除可能的前后空格
                    df[col] = df[col].apply(lambda x: x.strip() if isinstance(x, str) and x != 'None' else x)

            return df

        except Exception as e:
            logging.error("excel文件没有找到",e)
            return pd.DataFrame()
        except ValueError as e:
            print(f"文件格式错误: {e}")
            return pd.DataFrame()
